#ifndef TRANSFORMATION_H
#define TRANSFORMATION_H

#include "src/math/matrix.h"
#include "src/math/vector3d.h"

class Transformation{
    public:
        Transformation();
        ~Transformation();

        void setLocalToWorld(const Matrix &_m) {localToWorld = _m;};
        void setWorldToLocal(const Matrix &_m) {worldToLocal = _m;};
        void setMatrices(const Matrix &_m, const Matrix &_mI) {localToWorld = _m; worldToLocal = _mI;};
        const Matrix &getLocalToWorld() const;
        const Matrix &getWorldToLocal() const;
        Matrix getLocalToWorldDirection() const;
        Matrix getWorldToLocalDirection() const;

        Matrix addTranslation(const Vector3D &);
        Matrix addRotation(double, const Vector3D &, const Vector3D &, const Vector3D & = Vector3D(0,0,0));
        Matrix addScale(const Vector3D &, const Vector3D &, const Vector3D & = Vector3D(0,0,0));

    private:
        Matrix localToWorld; //de coordenadas objetos para mundo  |  normal
        Matrix worldToLocal; //de mundo para coordenadas de objeto  |  inversa
};

#endif
